#include <stdio.h>
#include<sys/types.h>
#include<unistd.h>

/////int main()
///{
///    pid_t pid=fork();//创建进程
///    if(pid<0)
///    {
///        printf("error\n");
///    }
///    else if(pid==0)//子进程
///    {
///        //sleep(2);
///        printf("我是子进程:我的pid=%d,我的ppid=%d\n",getpid(),getppid());
///    }
///    else
///    {
///        sleep(1);
///        printf("我是父进程：我的pid＝%d,我的ppid=%d\n",getpid(),getppid());
///    }
///
///
///    return 0;
///}
///


//
//int main()
//{
//    pid_t pid=fork();//创建进程
//    int num=1;
//    if(pid<0)
//    {
//        printf("error\n");
//    }
//    else if(pid==0)//子进程
//    {
//        //sleep(2);
//        printf("我是子进程:我的pid=%d,我的ppid=%d\n",getpid(),getppid());
//        num+=10;
//        printf("我子进程的num的地址为:%p,我的num的值=%d\n",&num,num);
//    }
//    else
//    {
//        sleep(1);
//        num+=20;
//        printf("我是父进程：我的pid＝%d,我的ppid=%d\n",getpid(),getppid());
//        printf("我父进程的num的地址为:%p,我的num的值=%d\n",&num,num);
//    }
//
//
//    return 0;
//
//}

#include<sys/wait.h>

int main()
{
    pid_t pid1=fork();//创建进程
    int num=1;
    if(pid1<0)
    {
        printf("error\n");
    }
    else if(pid1==0)//子进程
    {
        int k=5;
        while(k--)
        {
        
            printf("我是子进程\n");
            sleep(1);
        }
    }
    else
    {
        //int pid2=waitpid(-1,NULL,0);//-1任意的一个子进程都行
        //int pid2=waitpid(pid1,NULL,0);//0表示阻塞等待
        //printf("我等待子进程完成，才执行的\n");
        int pid2=waitpid(pid1,NULL,WNOHANG);//表示不阻塞等待
        if(pid1=pid2)
        {
            printf("父进程回收子进程\n");
        }
        else
        {
            printf("失败\n");
        }

        
    }



    return 0;

}
